DNS 서버 만들기
✒️ 2025-05-22 15:17 내용 수정
CentOS 7
1. 마스터서버
- DNS 패키지를 먼저 설치한다.
yum install -y bind bind-utils bind-libs bind-chroot- 패키지 관리 명령어 참고
- 셸에서 \를 입력하면 서브 셸 입력이 가능하고, 긴 줄을 간편하게 작성할 수 있다.
| 패키지 | 설명 |
|---|---|
| bind | DNS 서버 |
| bind-utils | DNS 명령어 |
| bind-libs | DNS 서버가 동작하게 해주는 보조 프로그램 |
| bind-chroot | DNS 방화벽 |
rpm -aq | grep bind로 패키지가 설치 되었는지 확인한다.
systemctl start named-chroot로 방화벽을 먼져 켜 준다.systemctl status named-chroot로 상태를 확인한다.
systemctl enable named-chroot로 재부팅 옵션을 설정한다.
cd /var/named/chroot/var/named로 디렉터리를 이동한다.- 각 하위 디렉터리로 이동할 때
ls -l또는ll을 입력해서 이동할 디렉터리가 존재하는지 확인한다. - 방화벽 역할의 chroot에서는 본인의 상위 디렉터리인 /var/named/와 root에 접근하지 못하도록 한다.
- chroot의 하위 디렉터리 var/named는 chroot의 상위 디렉터리의 복사본이다.
- 각 하위 디렉터리로 이동할 때
- 확인이 완료되었다면
vi /etc/named.conf에서 /etc/named.conf의 메인 설정을 변경한다.- Resources/Linux/리눅스#root 디렉터리 참고
- 13번 라인과 21번 라인의 localhost 구문을 { any; } 로 변경 (로컬 호스트만 사용 -> 아무나 사용 가능)
| 라인 | 구문 | 설명 |
|---|---|---|
| 13 | localhost | |
| 14 | localhost, version 6 표기 | |
| 21 | localhost | localhost |
cp /etc/named.rfc1912.zones backupFile로 먼저 원본 파일을 백업한 후,/etc/named.rfc1912.zones로 도메인 설정을 변경 후 저장한다.- 실습용으로 도메인 이름을 linuxdnsexam.com으로 설정했다.
- 정방향 선언 : 도메인을 ip 주소로 변환
- 역방향 선언 : ip 주소를 도메인으로 변환, 내부에서만 동작하므로 실전에서는 사용되지 않는다.
| 구문 | 설명 |
|---|---|
| zone "도메인주소" IN | 도메인 주소 지정 |
| type master/slave/hint; | 마스터, 슬레이브, 힌트 서버 타입 지정 |
| file "도메인주소.zone" | 도메인을 관리하기 위한 파일 설정 |
| zone은 정방향, rev는 역방향 선언 | |
| allow-update { 옵션; }; | 업데이트 여부 지정. 로컬에서 사용한다면 none으로 지정 |
cd /var/named/chroot/var/named/로 이동한다.cp named.localhost 도메인주소.zone으로 파일을 복사하고,chown named.named 도메인주소.zone로 사용자와 그룹 소유 권한을 named로 설정해준다.- 도메인 선언이 완료되면 반드시 /var/named/chroot/var/named/도메인.zone 파일을 생성해야 한다.
- 이미 존재하는 named 파일을 복사해서 생성할 수 있다.
- named.localhost : 정방향 설정의 예시 파일
- named.loopback 역방향 설정의 예시 파일
vi 도메인주소.zone으로 도메인 관리 설정을 변경한다.
| DNS 레코드 | 설명 |
|---|---|
| A | IPv4의 정방향 서비스(도메인-> IP) : ARP |
| AAAA | IPv6의 정방향 서비스(도메인-> IP). IPv6에는 역방향이 없음 |
| PTR | IPv4의 역방향 서비스(IP -> 도메인) : RARP |
| MX | 메일 서버를 지칭 |
| NS | 네임 서버(DNS 서버를 지칭) |
| CNAME | 별칭, 아이피 주소 대신에 도메인 사용 가능. |
- 주의 사항
- 도메인 파일(지역 파일)에서 도메인 주소는 반드시 마지막에 "."을 입력해야 한다.
- 아이피 주소는 "."를 생략한다.
- @ 기호는 localhost 주소를 의미하므로, 메일 주소를 작성할 때는 @ 대신 "."을 사용한다.
- 모든 설정이 완료되었다면 네트워크 설정에서 DNS 주소를 DNS 서버의 ip 주소로 변경한다. 네트워크 설정 후에는 반드시 네트워크를 한 번 껐다가 켜는 걸 잊지 말자.
- 네임 서버가 도메인 서비스를 원활하게 하기 위해서는 DNS 주소를 네임 서버의 ip 주소로 변경해주어야 한다.
- 사진에선 네임 서버가 자기 자신이기 때문에 본인 ip 주소를 입력했다.
- 환경 설정 파일과 도메인 설정에 오류가 있는지 명령어로 확인한다.
named-checkconf /etc/named.confnamed-checkconf /etc/named.rfc1912.zonesnamed-checkzone 도메인주소 도메인주소.zone
- 만약 파일에 오류가 있다면 오류 문구가 출력된다.
systemctl restart named로 데몬을 재실행한다.nslookup 도메인주소또는host 도메인주소를 사용해서 도메인 주소가 설정했던 ip 주소를 가지고 있는지 확인한다.- www, mail, cafe 등등 설정에서 넣었던 네임 서버를 모두 테스트해볼 수 있다.
- 동작 확인을 위해 먼저
systemctl start httpd로 http 데몬을 실행한다. cd /var/www/html로 이동하고vi index.html로 홈페이지를 간략하게 설정한다.- HTML 참고
- CentOS에서 FireFox에 도메인이나 설정했던 ip 주소를 입력하면 실제 설정했던 웹 페이지가 뜨는 것을 확인할 수 있다.
2. 슬레이브 서버
- 슬레이브는 DNS 주소를 마스터로 지정한다.
- 지역 파일은 마스터가 생성하여 슬레이브 서버에 전달한다.
- 마스터서버 설정 변경 :
gedit /etc/named.rfc1912.zones을 연다. - allow-transfer { slave아이피; }; 를 추가한다.
zone "마스터도메인" IN {
type master;
file "마스터도메인.zone";
allow-update { none; };
allow-transfer { 슬레이브1아이피; 슬레이브2아이피; };
};
- 라인을 추가한 후 저장 후 종료한다. 그 다음
systemctl restart named로 데몬을 재시작한다.
- 이번엔 슬레이브 서버로 지정할 컴퓨터 혹은 가상머신에서 작업한다. 패키지 다운로드는 마스터 서버 설치때와 동일하다.
gedit /etc/named.rfc1912.zones로 파일을 연다.
- 아래 내용으로 변경한다.
zone "마스터도메인" IN {
type slave;
file "slaves/마스터도메인.zone";
masters { 마스터아이피; };
};
- 변경이 완료되었다면 저장 후 종료하고, 마찬가지로
systemctl restart named로 데몬을 재시작한다. - 마스터 서버 컴퓨터의
cd /var/named/chroot/var/named/slaves로 이동한 다음 슬레이브 서버 파일이 생성되었는지 확인한다.- 이 부분은 GeoIP 오류때문에 named 재시작이 안되서 더 진행하지 못해 확인하지 못했다.
Rocky 9
1. 캐싱 서버
- Zone 파일을 생성하지 않고 ROOT DNS 서버로부터 파일을 다운 받아 운영한다.
- DNS#DNS 구조 참고.
- /var/named 에 named.ca 파일에 ROOT DNS 서버가 전달해준 전세계 도메인 서버 주소가 들어있다.
dnf -y install bind bind-chroot로 dns 관련 패키지를 다운 받고,rpm -aq | grep bind로 패키지가 설치 되었는지 확인한다.
vi /etc/named.conf로 /etc/named.conf 파일을 변경하여 환경 설정을 한다.
11 : listen-on port 53 { any; }; // 실습용으로 모두 사용 가능하게 허용
12 : listen-on-v6 port 53 { none; }; // IPv6 사용 안함 설정
19 : allow-query { any; };
33 : dnssec-validation no;
systemctl status named로 현재 dns 데몬이 실행중인지 확인하고,systemctl enable named로 재부팅 옵션을 설정 후systemctl start named나systemctl restart named로 서비스를 실행/재실행 한다.
- 이번에는 방화벽을 끄지 않고 방화벽에 DNS를 추가하여 운영한다.
firewall-config를 입력하여 초기 방화벽 GUI 프로그램이 설치되지 않았다면 패키지를 y 또는 yes 명령어를 눌러 다운 받고, 다운이 완료되면 자동으로 GUI가 켜진다.- 방화벽에서 영역->설정의 영구적->서비스에서 DNS를 체크->메뉴바에서 Firewalld 다시 불러오기(재실행)으로 방화벽에 허용할 서비스를 선택한다.
- 혹은 프로토콜, 포트 번호를 알고 있다면 포트 항목에서 추가한다.
- 설정을 영구적으로 설정하면 터미널이 닫혀도 방화벽에서 해당 서비스를 허용한다.
- 방화벽도 재실행이 완료 되었다면 Rocky 우측 상단의 네트워크 아이콘 - 유선 네트워크 설정에서 DNS 주소를 본인 ip(현재 DNS 서버를 구동중인 컴퓨터가 본인이므로)로 변경한다.
nslookup www.naver.com,dig www.naver.com,host www.naver.com으로 네이버의 도메인 주소를 잘 찾아오는지 확인한다.
- 테스트를 위해 찾아낸 네이버 ip 주소를 Firefox에 입력하여 네이버 주소가 맞는지 확인한다.
- 제대로 찾아온 걸 확인할 수 있다.
- 제대로 찾아온 걸 확인할 수 있다.
2. 마스터 서버
- 캐싱 서버 만들기의 과정과 동일하게 진행하고, DNS 서버 만들기#1. 마스터서버의 6번 과정 이후부터 시작한다.
- /etc/named.conf 파일을
vi /etc/named.conf으로 열어 가장 마지막 줄에 도메인을 선언한다.- DNS 서버 만들기#1. 마스터서버의 7번 과정과 동일한 내용이다.
- DNS 파일을 읽을 때 /etc/named.conf -> /etc/named.rfc1912.zones -> /var/name/도메인 순서로 읽기 때문에 /etc/named.conf 파일에 도메인을 먼저 선언해주면 /etc/named.rfc1912.zones에 따로 설정하지 않아도 된다.
zone "lnxtest.com" IN {
type master;
file "lnxtest.com.db";
allow-update { none; };
};
cd /var/named로 /var/named 디렉터리로 이동한다.cp -a named.localhost lnxtest.com.db로 선언된 도메인의 zone 파일을 복사한다.- 파일 및 디렉토리 관리 명령어#파일 복사 및 변경에서 a 옵션은 원본 파일의 속성을 그대로 복사한다.
- 도메인 환경 설정을 위해 zone 파일(lnxtest.com.db 파일)을
vi lnxtest.com.db로 연 후 내용을 수정한다.- 항목별 상세 내용은 DNS 서버 만들기#1. 마스터서버 10번 참고.
$TTL 1D
@ IN SOA @ root. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A ip주소
MX 10 도메인이름.
ns IN A ip주소
mail IN A ip주소
www IN A ip주소
- 환경 설정 오류 확인을 위해
named-checkconf,named-checkzone lnxtest.com lnxtest.com.db를 입력한다.
- 환경 설정이 완료되었으므로
systemctl restart named로 서비스를 재실행하거나systemctl start named로 서비스를 실행해주고,systemctl status named로 서비스의 상태를 확인한다.
- Rocky의 우측 상단 네트워크 아이콘 - 유선 네트워크 설정으로 DNS 주소를 자신의 ip로 변경한다.
- 이미 설정되어 있다면 생략
nslookup www.lnxtest.com,nslookup mail.lnxtest.com으로 자신의 도메인 서비스가 잘 잡히는지 확인한다.